Tengo problemas para usar la etiqueta latest en una definición de tarea de ECR, donde el parámetro de image tiene un valor como XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/reponame/web:latest .
Espero que esta definición de tarea extraiga una imagen con la latest etiqueta de ECR una vez que se ejecute una nueva instancia de servicio (tarea) en la instancia del contenedor (una instancia EC2 registrada en el clúster).
Sin embargo, en mi caso, cuando me conecto a la instancia del contenedor de forma remota y enumero las imágenes de la ventana acoplable, puedo ver que no ha extraído la imagen de la última versión de ECR.
La última etiqueta hay dos versiones de lanzamiento detrás de la actual, desde que actualicé la definición de la tarea para usar la latest instancia de etiqueta para definir explícitamente la etiqueta de versión, es decir :v1.05 .
Solo tengo una instancia de contenedor en este clúster.
Es posible que haya alguna peculiaridad en mi proceso, pero esta pregunta es principalmente sobre cómo debería comportarse este latest en este tipo de escenario.
Mi creación y etiquetado de imágenes acoplables, envío de ECR, actualización de definición de tareas de ECS y proceso de actualización del servicio de ECS:
# Build the image with multiple tags docker build -t reponame/web:latest -t reponame/web:v1.05 . # Tag the image with the ECR repo URI docker tag ${imageId} XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/reponame/web # Push both tags separately docker push XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/reponame/web:v1.05 docker push XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/reponame/web:latest # Run only if the definition file's contents has been updated aws ecs register-task-definition --cli-input-json file://web-task-definition.json # Update the service with force-new-deployment aws ecs update-service \ --cluster my-cluster-name \ --service web \ --task-definition web \ --force-new-deploymentCon un archivo de definición de tareas:
{ "family": "web", "containerDefinitions": [ { "name": "web", "image": "XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/reponame/web:latest", "essential": true, "memory": 768, "memoryReservation": 512, "cpu": 768, "portMappings": [ { "containerPort": 5000, "hostPort": 80 } ], "entryPoint": [ "yarn", "start" ], "environment": [ { "name": "HOST", "value": "0.0.0.0" }, { "name": "NUXT_HOST", "value": "0.0.0.0" }, { "name": "NUXT_PORT", "value": "5000" }, { "name": "NODE_ENV", "value": "production" }, { "name": "API_URL", "value": "/api" } ] } ] }Resultó que el problema estaba en mis guiones. Estaba usando una variable diferente que aún tenía un valor antiguo almacenado en mi sesión de terminal.
He validado que al usar la latest etiqueta en la URL de origen de la imagen de la definición de la tarea, tiene una instancia de servicio recién iniciada para extraer la imagen con la latest etiqueta de ECR.
Sin necesidad de registrar una nueva revisión de la definición de la tarea.
Como nota al margen, hay que tener cuidado con el manejo de la latest etiqueta. En este escenario parece funcionar, pero en muchos otros casos sería propenso a errores: Ref1 , Ref2
Debe etiquetar y enviar la latest versión cuando cree una nueva imagen; de lo contrario, la etiqueta no se actualizará en el registro.
También hay una opción para forzar la extracción cuando se ejecuta una imagen, de modo que el host de la ventana acoplable no asuma que solo porque extrajo la latest versión ayer, aún debe intentar extraer la latest versión hoy.